/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Services.TipoArchivoService;

import dataBase.HibernateUtil;
import exeptions.GeneralException;
import exeptions.MsgException;
import java.util.List;
import mapeos.Tipoarchivo;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.hibernate.exception.ConstraintViolationException;

/**
 *
 * @author ivanpianetti
 */
public class TipoArchivoService implements ITipoArchivoService {

    private static ITipoArchivoService unTipoArchivoService;

    public static ITipoArchivoService getInstance() {
        if (unTipoArchivoService == null || !(unTipoArchivoService instanceof ITipoArchivoService)) {
            unTipoArchivoService = new TipoArchivoService();
        }
        return unTipoArchivoService;
    }

    public List<Tipoarchivo> getAll() throws GeneralException {
        List<Tipoarchivo> usuarios = null;
        Session s = HibernateUtil.currentSession();
        try {
            Transaction t = s.beginTransaction();
            usuarios = (List<Tipoarchivo>) s.createCriteria(Tipoarchivo.class).list();
        } catch (HibernateException he) {
            throw new HibernateException(he);
        } finally {
            if (s.isOpen()) {
                s.close();
            }
        }
        return usuarios;
    }

    public Tipoarchivo getById(int pId) throws GeneralException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public Tipoarchivo getByTipo(String tipo) throws GeneralException {
        Session s = HibernateUtil.currentSession();
        Tipoarchivo tipoArch = new Tipoarchivo();
        try {
            Transaction t = s.beginTransaction();
            tipoArch = (Tipoarchivo) s.createCriteria(Tipoarchivo.class).
                    add(Restrictions.like("tipo", tipo)).uniqueResult();
            t.commit();
        } catch (ConstraintViolationException he) {
            throw new GeneralException(MsgException.getMsgException("ERROR?", he));
        } catch (HibernateException he) {
            throw new HibernateException(he);
        } finally {
            if (s.isOpen()) {
                s.close();
            }
        }
        return tipoArch;
    }

    public void insert(Tipoarchivo tipoArchivo) throws GeneralException {
        Session s = HibernateUtil.currentSession();
        try {
            Transaction t = s.beginTransaction();
            s.save(tipoArchivo);
            t.commit();
        } catch (ConstraintViolationException he) {
            throw new GeneralException(MsgException.getMsgException("ERROR?", he));
        } catch (HibernateException he) {
            throw new HibernateException(he);
        } finally {
            if (s.isOpen()) {
                s.close();
            }
        }
    }
}
